#ifndef __QUEUE_H__
#define __QUEUE_H__

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <stdbool.h>

//queue data type define
typedef struct BTListNode* QDataType;
//queue node struct
typedef struct QueueNode
{
	QDataType data;
	struct QueueNode* next;
}QNode;
//queue head pointer and queue tail pointer
typedef struct Queue
{
	QNode* phead;
	QNode* ptail;
	int size;
}Queue;

//queue init
void QueueInit(Queue* pq);

//queue destroy
void QueueDestroy(Queue* pq);

//queue tail push
void QueuePush(Queue* pq, QDataType value);

//queue head pop
void QueuePop(Queue* pq);

//queue front value
QDataType QueueFront(Queue* pq);

//queue back value
QDataType QueueBack(Queue* pq);

//queue size
int QueueSize(Queue* pq);

//queue empty
bool QueueEmpty(Queue* pq);


#endif /*__QUEUE_H__*/